package com.atguigu.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * 1、整合mybatis plus
 *  1)、导入依赖
 *  <dependency>
 *             <groupId>com.baomidou</groupId>
 *             <artifactId>mybatis-plus-boot-starter</artifactId>
 *             <version>3.2.0</version>
 *         </dependency>
 *  2）、配置
 *      1、配置数据源
 *          1)、导入数据库的驱动
 *          2)、在application.yml配置相关信息
 *      2、配置mybatis plus
 *          1)、使用2MapperScan
 *          2)、告诉mybatis plus，sql映射文件位置
 *
 *  2、逻辑删除
 *      1）、配置全局的逻辑删除规则（省略）
 *      2）、配置逻辑删除的组件Bean（省略）
 *      3)、给Bean加上逻辑删除朱姐@TableLogic
 *
 *  3、JSR303
 *      1）、给Bean添加校验注解 javax.validation.constraints，并定义自己的message提示
 *      2）、开启校验功能，添加@Valid
 *          效果：校验错误以后会有默认的响应。
 *      3）、给校验的Bean后紧跟一个BindingResult，就可以获取到检验结果
 *      4）、分组校验（多场景复杂校验）
 *           @NotNull(message = "修改必须指定品牌",groups = {UpdateGroup.class})
 *          1）、给校验注解标注什么情况需要进行校验
 *          @Validated(UpdateGroup.class)
 *          2）、默认没有指定分组的校验，在分组校验的情况下不生效，只会在不指定的情况下实现
 *      5）、自定义校验
 *          1）、编写一个自定义的囧言注解
 *          2）、编写一个自定义的校验器
 *          3）、关联自定义的校验器和自定义的校验注解
 *
 *   4、统一的异常处理
 *      1）、编写异常处理类，试用@controlleradvise
 *      2）、试用@ExceptionHandler标注方法可以处理的异常
 *
 *   5、模板引擎
 *
 *   6、整合redis
 *      1）、引入data-redis-starter
 *      2）、简单配置redis的host等信息
 *      3）、使用SpringBoot自动配置好的StringRedisTemplate来操作redis
 *
 *   7、整合redisson作为分布式锁等功能框架
 *      1）、引入依赖
 *      2）、配置redisson
 *          MyRedissonConfig给容器中配置一个RedissonClient实例即可
 *      3）、使用，参照文档
 *
 *   8、整合SpringCache简化缓存开发
 *      1)、引入依赖
 *          spring-boot-starter-cache、spring-boot-starter-data-redis
 *      2)、写配置
 *          （1）、自动配置了那些
 *              CacheAutoConfiguration会导入RedisCacheConfiguration：
 *              自动配好了缓存管理器RedisCacheManger
 *           （2）、配置使用redis作为缓存
 *      3）、实测试用缓存
 *          1）、开启缓存功能
 *          2）、只需要使用注解
 */
@EnableCaching
@EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign")
@EnableDiscoveryClient
@MapperScan("com.atguigu.gulimall.product.dao")
@SpringBootApplication
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
